#!/usr/bin/env node
// node cli 应用入口文件需要有这种开头
// mac 电脑需要修改文件权限755 chmod 755 cli.js

const inquirer = require('inquirer')
const fs = require('fs')
const path = require('path')
const ejs = require('ejs')
// 根据用户输入的一些问题结果生成配置的一些文件
inquirer.prompt([
  { 
    type: 'input', 
    name: 'title', 
    message: 'Your project name?', 
  },
  { 
    type: 'input', 
    name: 'name', 
    message: 'Your name?', 
  },
  { 
    type: 'input', 
    name: 'backgroundColor', 
    message: 'Project background color?', 
  }
]).then((answers) => {
  // 模板目录
  const tempDir = path.join(__dirname, 'templates')
  // 目标目录
  const destDir = path.join(process.cwd(), 'release')
  // 删除所有目标目录的文件后生成目标目录文件夹
  deleteAllFile(destDir)
  fs.mkdirSync(destDir)

  // 获取模板文件目录 遍历到文件夹中的所有文件，然后写入到目标文件目录中
  fs.readdir(tempDir, (err, files) => {
    if (err) throw err
    files.forEach(file => {
      ejs.renderFile(path.join(tempDir, file), answers, function(err, result) {
        if( err) throw err
        // 写入目标文件目录中
        fs.writeFileSync(path.join(destDir, file), result)
      })
    })
  })
})

// 清空所有文件及文件夹
function deleteAllFile(path) {
  let files = [];
  if(fs.existsSync(path)) {
      files = fs.readdirSync(path) || [];
      files.map(file => {
        let curPath = path + "/" + file;
        if(fs.statSync(curPath).isDirectory()) { // 如果是文件夹 递归
          deleteAllFile(curPath);
        } else { // 是文件 删除文件
          fs.unlinkSync(curPath);
        }
      })
      fs.rmdirSync(path);
  }
};